UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 3.28 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import"../../../core/has.js";import{progressiveLoadingModulo as e}from"./TerrainConst.js";import{fallsWithinLayerView as t,getTileMapCache as s}from"./tileUtils.js";class i{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(e,t){this._setUpsampleTile(e,t),this._tileRequested=null,e===this.tile?this.tile.updateRenderData(this._layerClass,0,t):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 i=this._layerIdx,l=this._layerClass,a=this.tile.surface.layerViewByIndex(i,l),{minLevel:n,maxLevel:r}=a.dataLevelRange,h=this._desiredMinLevelDelta,d=this._progressiveLevelModulo+h;let u=this.tile;const _=u.level;let o;if(this._scaleRangeEnabled&&!t(u,a))return null;const p=this._tileLayerInfo.upsampleInfo,y=p?.tile?.level??-1,f=null!=p&&y-_>=h,v=s(a),c="vector-tile-3d"===a.type?a.schemaHelper:null;for(;u&&u.level>=n;){const t=u.level,s=_-t,a=u.layerInfo[l][i];if(a.data&&s>=h){(!f||t>y)&&this._setUpsampleTile(u),a.dataInvalidated&&(o=u);break}const p=c?.getLevelRowColumn(u.lij)??u.lij;if("unavailable"!==v?.getAvailability(p[0],p[1],p[2])&&t<=r&&!a.data&&!a.dataMissing&&((!o||u.level===n||t%e===0||_-o.level<h)&&(o=u),s>=d))break;u=u.parent}if(null!=o&&_-o.level<h)if(p)o=null;else{const e=this._findAncestorWithData();if(null!=e){this._setUpsampleTile(e);o=e.layerInfo[l][i].dataInvalidated?e:null}}return o}_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(e,t){this._tileLayerInfo.setUpsampleInfo(this.tile,e),this.tile.updateRenderData(this._layerClass,0,t)}get test(){}}class l extends i{constructor(){super(...arguments),this.type="none"}get _desiredMinLevelDelta(){throw a}get _progressiveLevelModulo(){throw a}dispose(){}}const a=new Error("Abstract method called on TileAgent"),n=new l;export{i as TileAgent,n as tileAgentDone};