UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

3 lines (2 loc) 3.31 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{__decorate as e}from"tslib";import{property as n,subclass as r}from"../../core/accessorSupport/decorators.js";import{highlightPixels as t}from"../raster/functions/pixelUtils.js";import{convertVectorFieldData as o}from"../raster/functions/vectorFieldUtils.js";import s from"../support/RasterJobHandler.js";import{getDefaultBandCombination as i,normalizeRendererJSON as a}from"../../renderers/support/rasterRendererHelper.js";import{createFlowMesh as l}from"../../views/2d/engine/flow/dataUtils.js";const d=d=>{const c=d;let h=class extends c{constructor(){super(...arguments),this._rasterJobHandlerConfig={instance:null,refCount:0,connectionPromise:null}}get _rasterJobHandler(){return this._rasterJobHandlerConfig.instance}increaseRasterJobHandlerUsage(){this._rasterJobHandlerConfig.refCount++}decreaseRasterJobHandlerUsage(){this._rasterJobHandlerConfig.refCount--,this._rasterJobHandlerConfig.refCount<=0&&this._shutdownJobHandler()}async convertVectorFieldData(e,n,r){if(null==e)return null;const t=this._rasterJobHandler;return t?t.convertVectorFieldData({pixelBlock:e,dataType:n},r):o(e,n)}async createFlowMesh(e,n){const r=this._rasterJobHandler;return r?r.createFlowMesh(e,n):l(e.meshType,e.simulationSettings,e.flowData,e.startInfo,null!=n.signal?n.signal:(new AbortController).signal)}async highlightPixels(e,n){const r=this,{bandIds:o}=r,s="imagery"===r.type?r.rasterInfo:r.raster.rasterInfo,a=o?.length?o:i(s),l=e.highlightOptions.map(e=>{const n={...e},r="bandId"in n?[n.bandId??0]:[n.xBandId,n.yBandId];for(let t=0;t<r.length;t++){const e=r[t];if(null==e)return;const n=a?.length?a.indexOf(e):e;if(n<0||n>2)return;r[t]=n}return"bandId"in n?n.bandId=r[0]:(n.xBandId=r[0],n.yBandId=r[1]),n}).filter(e=>null!=e);if(0===l.length)return;const d=this._rasterJobHandler;d?await d.highlightPixels({...e,highlightOptions:l},n):t({...e,highlightOptions:l})}_initJobHandler(){const{_rasterJobHandlerConfig:e}=this;if(e.connectionPromise)return e.connectionPromise;const n=new s;return e.connectionPromise=n.initialize().then(()=>{e.instance=n,this.notifyChange("_rasterJobHandler")},()=>{}),e.connectionPromise}_shutdownJobHandler(){const{_rasterJobHandlerConfig:e}=this;e.instance?.destroy(),e.instance=null,e.connectionPromise=null,e.refCount=0,this.notifyChange("_rasterJobHandler"),this._cachedRendererJson=void 0}async _updateSymbolizer(e,n,r,t){const o=this._rasterJobHandlerConfig.instance;if(!o)return;const s=a({...n.toJSON(),variableName:r});JSON.stringify(this._cachedRendererJson)!==JSON.stringify(s)&&(t&&(e.rasterInfo=t),e.rendererJSON=s,e.bind(),await o.updateSymbolizer(e),this._cachedRendererJson=n.toJSON())}async _symbolize(e,n){const{pixelData:r,bandIds:t,simpleStretchParams:o}=e,s=this._rasterJobHandler;if(s){const e=await s.symbolize({...r,simpleStretchParams:o,bandIds:t},n);return{extent:r.extent,pixelBlock:e}}const i=e.symbolizer.symbolize({...r,simpleStretchParams:o,bandIds:t});return{extent:r.extent,pixelBlock:i}}};return e([n({clonable:!1})],h.prototype,"_rasterJobHandler",null),e([n({clonable:!1})],h.prototype,"_cachedRendererJson",void 0),e([n({clonable:!1})],h.prototype,"_rasterJobHandlerConfig",void 0),h=e([r("esri.layers.mixins.RasterJobHandlerMixin")],h),h};export{d as RasterJobHandlerMixin};