UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 3.42 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import"../../../core/has.js";import{TextureUpdate as e}from"./interfaces.js";import{progressiveLoadingModulo as t}from"./TerrainConst.js";import{fallsWithinLayerView as s,getTileMapCache as i}from"./tileUtils.js";class l{get updating(){return!!this._tileRequested}init(e,t,s,i){this.tile=e,this._layerIdx=t,this._layerClass=s,this._suspended=i,this._tileLayerInfo=e.getLayerInfo(t,s),this._tileRequested=null;const l=this._findAncestorWithData();this._setUpsampleTile(l)}startLoading(){return this._requestNext()}dispose(){this._tileRequested&&(this._tileRequested.unrequestLayerData(this._layerIdx,this._layerClass,this),this._tileRequested=null),this.tile=null,this._tileLayerInfo=null}setSuspension(e){e!==this._suspended&&(this._suspended=e,e?this._tileRequested&&(this._tileRequested.unrequestLayerData(this._layerIdx,this._layerClass,this),this._tileRequested=null):this._tileLayerInfo.data||this.update())}update(){const e=this._findAncestorWithData();return this._setUpsampleTile(e),this._requestNext()}dataArrived(t,s){this._setUpsampleTile(t,s),this._tileRequested=null,t===this.tile?this.tile.updateRenderData(this._layerClass,e.FADING,s):this._requestNext()}dataMissing(){this._tileRequested=null,this._tileLayerInfo.data=null,this._requestNext()}_agentDone(){this.tile.agentDone(this._layerIdx,this._layerClass),this.dispose()}_requestNext(){if(this._suspended)return!0;const e=this._findNextDownload();if(this._tileRequested){if(e===this._tileRequested)return!0;this._tileRequested.unrequestLayerData(this._layerIdx,this._layerClass,this),this._tileRequested=null}return null!=e?e.requestLayerData(this._layerIdx,this._layerClass,this)&&(this._tileRequested=e):this._agentDone(),!!this._tileRequested}_findNextDownload(){const e=this._layerIdx,l=this._layerClass,a=this.tile.surface.layerViewByIndex(e,l),{minLevel:n,maxLevel:r}=a.dataLevelRange,h=this._desiredMinLevelDelta,d=this._progressiveLevelModulo+h,u=this._scaleRangeEnabled?s:()=>!0;let _=this.tile;const o=_.level;let p;const y=this._tileLayerInfo.upsampleInfo,f=y?.tile?.level??-1,c=null!=y&&f-o>=h,v=i(a),q="vector-tile-3d"===a.type?a.schemaHelper:null;for(;_&&u(_,a)&&_.level>=n;){const s=_.level,i=o-s,a=_.layerInfo[l][e];if(a.data&&i>=h){(!c||s>f)&&this._setUpsampleTile(_),a.dataInvalidated&&(p=_);break}const u=q?.getLevelRowColumn(_.lij)??_.lij;if("unavailable"!==v?.getAvailability(u[0],u[1],u[2])&&s<=r&&!a.data&&!a.dataMissing&&((!p||_.level===n||s%t===0||o-p.level<h)&&(p=_),i>=d))break;_=_.parent}if(null!=p&&o-p.level<h)if(y)p=null;else{const t=this._findAncestorWithData();if(null!=t){this._setUpsampleTile(t);p=t.layerInfo[l][e].dataInvalidated?t:null}}return p}_findAncestorWithData(){const e=this.tile.elevationLevel,t=this._desiredMinLevelDelta;let s;for(let i=this.tile;i;i=i.parent)if(i.hasLayerData(this._layerIdx,this._layerClass)){if(e-i.level>=t)return i;s=i}return s}_setUpsampleTile(t,s){this._tileLayerInfo.setUpsampleInfo(this.tile,t),this.tile.updateRenderData(this._layerClass,e.FADING,s)}get test(){}}class a extends l{constructor(){super(...arguments),this.type="none"}get _desiredMinLevelDelta(){throw n}get _progressiveLevelModulo(){throw n}dispose(){}}const n=new Error("Abstract method called on TileAgent"),r=new a;export{l as TileAgent,r as tileAgentDone};