realmap
Version:
Wooritech map chart component library
8 lines (6 loc) • 5.86 kB
JavaScript
/**
* RealMap Heatmap v1.1.6
* Copyright (C) 2023-2026 WooriTech Inc.
* All Rights Reserved.
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("realmap")):"function"==typeof define&&define.amd?define(["exports","realmap"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).RealMapheatmap={},e.RealMap)}(this,(function(e,t){"use strict";function i(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(i){if("default"!==i){var r=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,r.get?r:{enumerable:!0,get:function(){return e[i]}})}})),t.default=e,Object.freeze(t)}var r=i(t);class s extends t.MarkerSeriesPoint{_readObject(e,t){super._readObject(e,t)}}const o={count:e=>e.length,sum:e=>e.map((e=>e.getValue())).reduce(((e,t)=>e+t)),avg:e=>e.map((e=>e.getValue())).reduce(((e,t)=>e+t))/e.length};class l{_apply(e){this.origin=t.parseCoord(e.origin),this.cellWidth=+e.cellWidth,this.cellHeight=+e.cellWidth,isNaN(this.cellHeight)&&(this.cellHeight=t.maxv(60,t.pickNum(this.cellWidth,3600))),isNaN(this.cellWidth)&&(this.cellWidth=this.cellHeight),this.blur=t.maxv(0,t.pickNum(e.blur,0)),this.aggregation=t.pickProp(e.aggregation,"sum")}buildCells(e){const i={},r=this.origin[0],s=this.origin[1],l=this.cellWidth,n=this.cellHeight;e.forEach((e=>{if(e.visible){const o=t.floor(3600*(e.lon-r)/l),a=t.floor(3600*(e.lat-s)/n),h=`${o}+${a}`;let p=i[h];p?p.points.push(e):i[h]={lon:o*l/3600,lat:a*n/3600,points:[e]}}}));const a=this._cells=Object.values(i),h=o[this.aggregation]||o.sum;return a.forEach((e=>{e.value=h(e.points)})),a}}class n{_apply(e){}}class a extends t.MarkerSeries{constructor(){super(...arguments),this._grid=new l,this._point=new n}_doApply(e){super._doApply(e),this._mode=e.mode||"grid",this._grid._apply(e.grid||{}),this._point._apply(e.point||{})}_createPoint(e){return new s(e)}setCalcedColor(e,i){super.setCalcedColor(e,i),this._colorObj=new t.Color(this._calcedColor)}getColorScale(){return 0}getValueRange(){return{min:this._minValue,max:this._maxValue}}getRangedColor(e){if(this._colorRanger)return this._colorRanger.getColor(this._minValue,this._maxValue,e.value,this._colorObj)}initPoints(e){const t=this._orgPoints=super.initPoints(e);if("grid"===this._mode){const e=this._grid.buildCells(t);t.length=0,e.forEach(((e,i)=>{const r=new s;r.index=i,r.coord=[e.lon,e.lat],r.value=e.value,r.cell=e,t.push(r)}))}return t}_doPrepareRender(e,t){var i;super._doPrepareRender(e,t);const r=this._visPoints,{min:s,max:o}=this._calcMinMax(r);this._minValue=s,this._maxValue=o,this._colorRanger=null===(i=e.getColorScale(this.getColorScale()))||void 0===i?void 0:i.getRanger()}}a.type=t.HeatmapSeriesType,a.defaults=t.extend(t.MarkerSeries.defaults,{mode:"grid"});class h extends t.MarkerSeriesPointView{constructor(e){super(e)}renderGrid(e,t){this.setPath(["M",0,0,"L",(e.p2[0]-e.p1[0])*t,0,(e.p2[0]-e.p1[0])*t,(e.p3[1]-e.p2[1])*t,(e.p4[0]-e.p1[0])*t,(e.p4[1]-e.p1[1])*t,"Z"])}renderPoint(e,t){}tooltipColor(){return getComputedStyle(this.dom).fill}}class p extends t.MarkerSeriesView{constructor(e){super(e,"rm-heatmap-series",!1,!1);const i=t.RmElement.createElement(e,"foreignObject");this._pointContainer.appendDom(i),this._pointContainer.add(this._dummy=new t.RmElement(e,t.SeriesView.POINT_CLASS)),this._dummy.dom.style.display="none",i.appendChild(this._canvas=e.createElement("canvas"))}_createMarkers(e){return new t.PointViewPool(e,h)}_doPrepeare(e,t,i){this.$_prepareMarkers(t,t._visPoints)}_doRender(e,t){this.$_layoutMarkers(e,t)}_doReset(){}_runShowEffect(e){e&&t.SeriesAnimation.grow(this)}_doViewRateChanged(e){this.$_layoutMarkers(this.width,this.height)}$_prepareSvgCells(e,t){this._pointContainer.setFill(e._runColor),this._markers.prepare(t.length,((i,r)=>{const s=i.point=t[r].point;this._setPointStyle(i,e,s)}))}$_prepareCanvasCells(e,t){}$_prepareGridMode(e,t){const i=e.chart.getProjection(),r=e._grid.cellWidth/3600,s=e._grid.cellHeight/3600,o=this._cells=[];t.forEach((e=>{if(!e.isNull){const t=[e.lon,e.lat],l=[e.lon+r,e.lat],n=[e.lon+r,e.lat+s],a=[e.lon,e.lat+s];if(i.isVisible(t)||i.isVisible(l)||i.isVisible(n)||i.isVisible(a)){const r=i.projectCoord(t),s=i.projectCoord(l),h=i.projectCoord(n),p=i.projectCoord(a);e.xPos=r[0],e.yPos=r[1],o.push({point:e,p1:r,p2:s,p3:h,p4:p})}}})),e._grid.blur>0?this.$_prepareCanvasCells(e,o):this.$_prepareSvgCells(e,o)}$_renderSvgCells(e){const t=this._scale;this._markers.forEach(((i,r)=>{const s=this._cells[r];i.setVisible(!0),i.renderGrid(s,t),i.trans(s.p1[0]*t,s.p1[1]*-t).rotate(e)}))}$_renderCanvasCells(e,t,i){const r=this.model,s=this._dummy,o=this._canvas,l=o.parentNode,n=o.getContext("2d"),{tx:a,ty:h,scale:p}=this._transInfo,d=this._wBody,c=this._hBody;l.setAttribute("width",d),l.setAttribute("height",c),o.width=d,o.height=c,o.style.width=d+"px",o.style.height=c+"px",n.clearRect(0,0,d,c),n.filter="blur(20px)",this._cells.forEach((e=>{const{p1:t,p2:i,p3:o,p4:l,point:d}=e,c=t[0]+(i[0]-t[0])/2,u=t[1]+(l[1]-t[1])/2,_=(i[0]-t[0]+o[0]-i[0])/2,g=(i[1]-t[1]+o[1]-i[1])/2;this._setPointStyle(s,r,d),n.fillStyle=getComputedStyle(s.dom).fill,n.beginPath(),n.ellipse((c-_/2)*p+a,(u-g/2)*-p+h,2*_*p,2*g*p,0,0,2*Math.PI),n.fill(),n.beginPath(),n.ellipse((c-_/10)*p+a,(u-g/10)*-p+h,1.2*_*p,1.2*g*p,0,0,2*Math.PI),n.fill()})),this.trans(0,0)}$_renderGridMode(e,t,i,r){e._grid.blur>0?this.$_renderCanvasCells(t,i,r):this.$_renderSvgCells(r)}$_preparePointMode(e,t){}$_renderPointMode(e,t){}$_prepareMarkers(e,t){if("point"===e._mode);else this.$_prepareGridMode(e,t)}$_layoutMarkers(e,t){const i=this.model,r=+i.options.rotation||0;if("point"===i._mode);else this.$_renderGridMode(i,e,t,r)}}function d(e){(function(e){return e.Series&&e.SeriesView})(e)&&(e.Series.register(a),e.SeriesView.register([a,p]))}d(r),e.HeatmapSeries=a,e.default=d,Object.defineProperty(e,"__esModule",{value:!0})}));