@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 3.71 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */
import{__decorate as t}from"tslib";import e from"../../../../Graphic.js";import r from"../../../../core/Accessor.js";import i from"../../../../core/Logger.js";import{isAbortError as a}from"../../../../core/promiseUtils.js";import{watch as s,syncAndInitial as o}from"../../../../core/reactiveUtils.js";import{property as n,subclass as l}from"../../../../core/accessorSupport/decorators.js";import{load as c,projectExtent as m}from"../../../../layers/raster/functions/rasterProjectionHelper.js";import{snapImageToSymbolTile as h}from"../../../../layers/raster/functions/vectorFieldUtils.js";import{RasterVFContainer as p}from"../../engine/imagery/RasterVFContainer.js";import y from"./ImageryVFStrategy.js";let x=class extends r{constructor(){super(...arguments),this.attached=!1,this.container=new p,this.type="imageryVF",this._dataParameters={exportParametersVersion:0,bbox:"",symbolTileSize:0,time:""},this._fetchpixels=async(t,e,r,i)=>{const a=await this._projectFullExtentPromise,{layer:s}=this,{symbolTileSize:o}=s.renderer,{extent:n,width:l,height:c}=h(t,e,r,o,a);if(null!=a&&!a.intersects(t))return{extent:n,pixelBlock:null};const m={bbox:`${n.xmin}, ${n.ymin}, ${n.xmax}, ${n.ymax}`,exportParametersVersion:s.exportImageServiceParameters.version,symbolTileSize:o,time:JSON.stringify(this.timeExtent||"")};if(this._canReuseVectorFieldData(m)){const t=this.getPixelData();if(null!=t){if(`${t.extent.xmin}, ${t.extent.ymin}, ${t.extent.xmax}, ${t.extent.ymax}`===m.bbox)return t}}const{pixelBlock:p}=await s.fetchPixels(n,l,c,{timeExtent:this.timeExtent,interpolation:s.interpolation,signal:i});if(this._dataParameters=m,null==p)return{extent:n,pixelBlock:null};const{dataType:y}=s.rasterInfo;return{extent:n,pixelBlock:"vector-uv"===y&&p?await s.convertVectorFieldData(p,"vector-uv",{signal:i}):p}}}get updating(){return!this.attached||this._strategy.updating}attach(){this._projectFullExtentPromise=this._getProjectedFullExtent(this.view.spatialReference),this._strategy=new y({container:this.container,fetchPixels:this._fetchpixels}),this.addHandles(s(()=>this.layer.renderer,t=>this._updateSymbolizerParams(t),o),"attach")}detach(){this._strategy.destroy(),this.container.children.forEach(t=>t.destroy()),this.container.removeAllChildren(),this.removeHandles("attach"),this._strategy=this.container=this._projectFullExtentPromise=null}getPixelData(){const t=this.container.children[0]?.rawPixelData;if(this.updating||!t)return null;const{extent:e,pixelBlock:r}=t;return{extent:e,pixelBlock:r}}hitTest(t){return new e({attributes:{},geometry:t.clone(),layer:this.layer})}update(t){this._strategy.update(t,this._symbolizerParams).catch(t=>{a(t)||i.getLogger(this).error(t)})}redraw(){const{renderer:t}=this.layer;t&&(this._updateSymbolizerParams(t),this._strategy.redraw(this._symbolizerParams))}_canReuseVectorFieldData(t){const e=this._dataParameters.exportParametersVersion===t.exportParametersVersion,r=this._dataParameters.time===t.time,i=this._dataParameters.symbolTileSize===t.symbolTileSize,a=this._dataParameters.bbox===t.bbox;return e&&r&&i&&a}async _getProjectedFullExtent(t){try{return await c(),m(this.layer.fullExtent,t)}catch{return null}}_updateSymbolizerParams(t){"vector-field"===t?.type&&(this._symbolizerParams=this.layer.symbolizer.generateWebGLParameters({pixelBlock:null}))}};t([n()],x.prototype,"attached",void 0),t([n()],x.prototype,"container",void 0),t([n()],x.prototype,"layer",void 0),t([n()],x.prototype,"timeExtent",void 0),t([n()],x.prototype,"type",void 0),t([n()],x.prototype,"view",void 0),t([n()],x.prototype,"updating",null),x=t([l("esri.views.2d.layers.imagery.VectorFieldView2D")],x);export{x as default};