UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 4.46 kB
import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../core/Error.js";import{isSome as r,unwrap as i,isNone as s}from"../../../core/maybe.js";import{whenOnce as a}from"../../../core/reactiveUtils.js";import{property as l}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/accessorSupport/ensureType.js";import"../../../core/arrayUtils.js";import{subclass as n}from"../../../core/accessorSupport/decorators/subclass.js";import{LayerView3D as o}from"./LayerView3D.js";import{TiledLayerView3D as m}from"./TiledLayerView3D.js";import{RasterTile as p}from"../terrain/RasterTile.js";import h from"../../layers/ImageryTileLayerView.js";import c from"../../layers/LayerView.js";import y from"../../layers/RefreshableLayerView.js";import{createQueryGeometry as d}from"../../support/drapedUtils.js";import{getWebGLCapabilities as f}from"../../webgl/capabilities.js";let u=class extends(h(y(m(o(c))))){constructor(){super(...arguments),this.type="imagery-tile-3d",this.isAlignedMapTile=!0}initialize(){this.layer.increaseRasterJobHandlerUsage(),null==this.fullExtent&&this.addResolvingPromise(Promise.reject(new t("layerview:spatial-reference-incompatible","The layer extent cannot be projected to the view's spatial reference",{layer:this.layer})));const e=a((()=>this.view?.basemapTerrain?.tilingSchemeLocked)).then((()=>{const e=this.view.basemapTerrain.tilingScheme,t=this.layer.tileInfo,r=["png","png24","png32","jpg","mixed"].includes(t.format)&&e.compatibleWith(t);this.isAlignedMapTile=r;const i=r?t:e.toTileInfo();this.tileInfo=i,this.updatingHandles.add((()=>[this.layer.renderer,this.layer.interpolation,this.layer.bandIds,this.layer.multidimensionalDefinition,this.layer.multidimensionalSubset,this.layer.rasterFunction,this.timeExtent]),(()=>this.refresh()))}));this.addResolvingPromise(e)}destroy(){this.layer.decreaseRasterJobHandlerUsage(),this.view=null}get _blankTile(){const e=document.createElement("canvas"),t=e.getContext("2d"),[r,i]=this.tileInfo.size;return e.width=r,e.height=i,t.clearRect(0,0,r,i),t.getImageData(0,0,r,i)}get imageFormatIsOpaque(){return"jpg"===this.layer.tileInfo.format}get hasMixedImageFormats(){return"mixed"===this.layer.tileInfo.format}get dataLevelRange(){const e=this.tileInfo.lods,t=this.layer.tileInfo.lods,r=e[0].scale,i=t[t.length-1].scale;return this.levelRangeFromScaleRange(r,i)}_getfullExtent(){return this.projectFullExtent(this.view.basemapTerrain&&r(this.view.basemapTerrain.spatialReference)?this.view.basemapTerrain.spatialReference:this.view.spatialReference)}async fetchTile(e,t,r,a){const l=this.tileInfo,n=this._canSymbolizeInWebGL(),o={tileInfo:l,requestRawData:n,signal:i(a.signal),timeExtent:this.timeExtent,requestAsImageElement:this.isAlignedMapTile},m=await this.layer.fetchTile(e,t,r,o);if(m instanceof HTMLImageElement)return m;let h=m&&m.pixelBlock;if(s(h))return this._blankTile;if(!n&&(h=await this.layer.applyRenderer(m),s(h)))return this._blankTile;const c=new p([e,t,r],h,l.size[0],l.size[1]);return n?(c.symbolizerRenderer=this.layer.symbolizer.rendererJSON,c.symbolizerParameters=this.layer.symbolizer.generateWebGLParameters(this._getSymbolizerOptions(e)),c.transformGrid=m.transformGrid):c.isRendereredSource=!0,c.interpolation=this.layer.interpolation,c.bandIds=this.layer.bandIds,c}_getSymbolizerOptions(e){const t=this.tileInfo.lodAt(e).resolution;return{pixelBlock:null,isGCS:this.view.basemapTerrain&&r(this.view.basemapTerrain.spatialReference)?this.view.basemapTerrain.spatialReference.isGeographic:this.view.spatialReference.isGeographic,resolution:{x:t,y:t},bandIds:this.layer.bandIds}}ensureSymbolizerParameters(e){this._canSymbolizeInWebGL()&&JSON.stringify(e.symbolizerRenderer)!==JSON.stringify(this.layer.symbolizer.rendererJSON)&&(e.symbolizerParameters=this.layer.symbolizer.generateWebGLParameters(this._getSymbolizerOptions(e.lij[0])))}createFetchPopupFeaturesQueryGeometry(e,t){return d(e,t,this.view)}refresh(){this.emit("data-changed")}async doRefresh(){this.suspended||this.emit("data-changed")}_canSymbolizeInWebGL(){return f("3d").supportsTextureFloat&&this.layer.symbolizer.canRenderInWebGL}};e([l({readOnly:!0})],u.prototype,"_blankTile",null),e([l({readOnly:!0})],u.prototype,"imageFormatIsOpaque",null),e([l({readOnly:!0})],u.prototype,"hasMixedImageFormats",null),e([l({readOnly:!0})],u.prototype,"dataLevelRange",null),u=e([n("esri.views.3d.layers.ImageryTileLayerView3D")],u);const g=u;export{g as default};