UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 3.15 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{__decorate as e}from"tslib";import o from"../../../request.js";import t from"../../../core/Error.js";import i from"../../../core/Logger.js";import{releaseMaybe as r}from"../../../core/maybe.js";import{isAborted as s}from"../../../core/promiseUtils.js";import{property as a,subclass as n}from"../../../core/accessorSupport/decorators.js";import l from"../../../layers/support/ElevationTileData.js";import{acquireDecoder as c}from"../../../layers/support/LercDecoder.js";import{queueHighPriority as m}from"../../../request/queue.js";import{ElevationLayerView3DModifications as p,ElevationLayerView3DModification as d}from"./ElevationLayerView3DModifications.js";import{LayerView3D as f}from"./LayerView3D.js";import{TiledLayerView3D as y}from"./TiledLayerView3D.js";import{elevationNoDataValue as h}from"../terrain/TerrainConst.js";import{useFetchTileForLayer as g}from"../terrain/terrainUtils.js";import u from"../../layers/LayerView.js";let w=class extends(y(f(u))){constructor(){super(...arguments),this.type="elevation-3d",this.modifications=new p}get tileInfo(){return this.layer.tileInfo}initialize(){const e=this.view,o=e.map?.allLayers,i=o&&o.includes(this.layer),r=e.map?.ground?.layers,s=r&&r.includes(this.layer);if(i&&!s){const e=new t("layerview:elevation-layer-only",`3D elevation layer '${this.layer.id}' can only be added to layers in map.ground`);this.addResolvingPromise(Promise.reject(e))}this._lercDecoder=c(e.resourceController),this._addTilingSchemeMatchPromise()}destroy(){this._lercDecoder=r(this._lercDecoder)}async fetchElevationTile(e,o){const t=await this._fetchTileData(e.lij,o);if(!s(o))return t&&await this.modifications.apply(t,e,o.signal),t}async _fetchTileData(e,t){const r=this.layer;if(g(r)){const o=await r.fetchTile(e[0],e[1],e[2],{noDataValue:h,signal:t.signal});return s(t)?void i.getLogger(this).warnOnce("A call to fetchTile resolved even though the request was aborted. fetchTile should not resolve if options.signal.aborted is true."):l.from(o)}t={...m,responseType:"array-buffer",...t};const a=this.getTileUrl(e),n=(await o(a,t)).data,c=await this._lercDecoder.decode(n,{noDataValue:h},t.signal);if(c)return new l({values:c.pixelData,width:c.width,height:c.height,noDataValue:c.noDataValue});throw new Error("LERC decoding failed")}async setModifications(e){if(this.modifications.modifications.length=0,!e||0===e.length)return;this._simplifyOperatorPromise??=import("../../../geometry/operators/simplifyOperator.js");const o=await this._simplifyOperatorPromise;for(const t of e){const e=t.geometry;if("polygon"===e?.type){const r=o.execute(e);if("polygon"===r?.type){const e=new d(t.type,r);this.modifications.modifications.push(e)}else i.getLogger(this).warn("Failed to simplify modification polygon")}else i.getLogger(this).warn("Invalid modification added to elevation layer: "+(e?`non polygon geometry ${e.type}`:"no geometry"))}}};e([a()],w.prototype,"layer",void 0),e([a()],w.prototype,"tileInfo",null),e([a()],w.prototype,"modifications",void 0),w=e([n("esri.views.3d.layers.ElevationLayerView3D")],w);const v=w;export{v as default};