UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 2.16 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */ import{remove as e}from"../../../../core/arrayUtils.js";import"../../../../core/has.js";import{createAbortError as t,createResolver as r,onAbort as s}from"../../../../core/promiseUtils.js";import i from"../../../../geometry/Multipoint.js";import{TaskPriority as o,noBudget as n}from"../../../support/Scheduler.js";class a{constructor(e,t){this.spatialReference=e,this._view=t}getElevation(e,t,r){return this._view.elevationProvider.getElevation(e,t,0,this.spatialReference,r)}async queryElevation(e,t,r,s,i){return this._view.elevationProvider.queryElevation(e,t,0,this.spatialReference,i,r,s)}}class l{constructor(e,t,r,s){this.spatialReference=t,this._getElevationQueryProvider=r,this._queries=new Array,this._queryOptions={...s,ignoreInvisibleLayers:!0},this._frameTask=e.registerTask(o.ELEVATION_QUERY,this)}destroy({completeTasks:e}={completeTasks:!1}){if(this._frameTask.remove(),this.readyToRun)if(e)this.runTask(n);else for(const r of this._queries)r.result.reject(t())}queryElevation(i,o,n,a=0){const l=r(),u={x:i,y:o,minDemResolution:a,result:l,signal:n};return this._queries.push(u),s(n,()=>{e(this._queries,u),l.reject(t())}),l.promise}get readyToRun(){return this._queries.length>0}runTask(e){const r=this._queries;this._queries=[];const o=this._getElevationQueryProvider();if(!o)return r.forEach(e=>e.result.reject()),void e.madeProgress();const n=r.map(e=>[e.x,e.y]),a=r.reduce((e,t)=>Math.min(e,t.minDemResolution),1/0),l=new i({points:n,spatialReference:this.spatialReference}),u=r.length>1&&r.some(e=>!!e.signal)?new AbortController:null,c=null!=u?u.signal:r[0].signal;if(null!=u){let e=0;r.forEach(i=>s(i.signal,()=>{e++,i.result.reject(t()),e===r.length&&u.abort()}))}const h={...this._queryOptions,minDemResolution:a,signal:c};o.queryElevation(l,h).then(e=>{r.forEach((r,s)=>{if(null!=r.signal&&r.signal.aborted)r.result.reject(t());else{const t=e.geometry.points[s][2],i=void 0!==h.noDataValue&&t===h.noDataValue?null:t;r.result.resolve(i)}})}).catch(e=>{r.forEach(t=>t.result.reject(e))}),e.madeProgress()}get test(){}}export{l as ElevationQuery,a as ViewElevationProvider};