@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 1.91 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import{create as e}from"../../../../geometry/support/aaBoundingRect.js";import{getWorldWidth as r}from"../../viewpointUtils.js";import s from"./BrushRasterBitmap.js";import{RasterTile as t}from"./RasterTile.js";import{WGLDrawPhase as i}from"../webgl/enums.js";import n from"../webgl/TileContainer.js";class o extends n{constructor(){super(...arguments),this.isCustomTilingScheme=!1}createTile(e){const r=this._getTileBounds(e),[s,i]=this.tileInfoView.tileInfo.size,n=this.tileInfoView.getTileResolution(e.level);return new t(e,n,r[0],r[3],s,i)}prepareRenderPasses(e){const r=e.registerRenderPass({name:"imagery (tile)",brushes:[s],target:()=>this.children.map((e=>e.bitmap)),drawPhase:i.MAP});return[...super.prepareRenderPasses(e),r]}doRender(e){if(!this.visible||e.drawPhase!==i.MAP)return;const{rasterFunctionChain:r}=this;if(!r)return e.renderPass="raster-bitmap",void super.doRender(e);if(!r.hasFocalFunction){const[s,t]=this.tileInfoView.tileInfo.size;e.renderPass="raster",e.rasterFunction={name:"Reproject",parameters:{targetImageSize:[s,t],requireNNEdge:r.isSourceSingleBand},pixelType:"f32",id:0,isNoopProcess:!1},super.doRender(e)}if(r?.functions.length){const{functions:s,hasBranches:t}=r;for(let r=0;r<s.length;r++){const i=s[r];"Constant"!==i.name&&"Identity"!==i.name&&(e.renderPass="raster",e.rasterFunction=i,e.hasBranches=t,super.doRender(e))}}e.rasterFunction=null,e.renderPass="bitmap",super.doRender(e)}_getTileBounds(s){const t=this.tileInfoView.getTileBounds(e(),s);if(this.isCustomTilingScheme&&s.world){const{tileInfo:e}=this.tileInfoView,i=r(e.spatialReference);if(i){const r=e.lodAt(s.level);if(!r)return t;const{resolution:n}=r,o=n*e.size[0];t[0]=i*s.world+e.origin.x+s.col*o,t[2]=t[0]+o}}return t}}export{o as RasterTileContainer};